﻿using BO;
using OR;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace CadastroBase.Consultas
{
    public partial class FrmConFuncionario : JMI_Nucleo.View.Form_Base.FrmBaseConsulta
    {
        private Funcionario funcionario = new Funcionario();
        private List<mFuncionario> lstFuncionario;
        private mFuncionario _mFuncionario;        

        public FrmConFuncionario()
        {
            InitializeComponent();
        }

        private DataTable GeraTabelaTemp(List<mFuncionario> Lista)
        {
            tb = new DataTable("Temp");

            tb.Columns.Add(new DataColumn("Codigo", typeof(int)));
            tb.Columns.Add(new DataColumn("DataCadastro", typeof(string)));
            tb.Columns.Add(new DataColumn("Nome", typeof(string)));
            tb.Columns.Add(new DataColumn("Telefone", typeof(string)));
            tb.Columns.Add(new DataColumn("Ativo", typeof(bool)));

            foreach (var item in Lista)
            {
                linha = tb.NewRow();
                linha["Codigo"] = item.Codigo;
                linha["DataCadastro"] = item.DataCadastro.ToShortDateString();
                linha["Nome"] = item.Pessoa.Nome;
                linha["Telefone"] = item.Contato.Telefone1;
                linha["Ativo"] = item.Ativo;
                tb.Rows.Add(linha);
            }
            return tb;
        }

        private void MontaGrade()
        {
            dgvConsulta.AutoGenerateColumns = false;

            DataGridViewTextBoxColumn colCodigo = CriaColuna("Codigo", "Código", 60);
            DataGridViewTextBoxColumn colDataCadastro = CriaColuna("DataCadastro", "Data Cadastro", 100);
            DataGridViewTextBoxColumn colTelefone = CriaColuna("Telefone", "Telefone", 120);
            DataGridViewCheckBoxColumn colAtivo = CriaColunaAtivo("Ativo", "Ativo", 50);
            DataGridViewTextBoxColumn colNomeFantasia = CriaColuna("Nome", "Nome", 340);

            dgvConsulta.Columns.Add(colCodigo);
            dgvConsulta.Columns.Add(colNomeFantasia);
            dgvConsulta.Columns.Add(colDataCadastro);
            dgvConsulta.Columns.Add(colTelefone);
            dgvConsulta.Columns.Add(colAtivo);
        }

        private void IniciaConsulta()
        {
            pnlDetalhe.Visible = true;
            MontaGrade();
            _mFuncionario = new mFuncionario();
            _mFuncionario.Pessoa.Nome = String.Empty;
       
            cboOpcao.Visible = false;

            lstFuncionario = funcionario.GetListaPorFiltro(_mFuncionario);

            CarregaBS();

            lblTitulo.Text = Titulo;
            TxtPesquisa.Focus();
        }

        private void CarregaBS()
        {
            this.Cursor = Cursors.WaitCursor;
            DataTable tbLocal = GeraTabelaTemp(lstFuncionario);
            this.Cursor = Cursors.Default;
            bsConFuncionario.DataSource = null;
            dgvConsulta.DataSource = null;
            dgvConsulta.Rows.Clear();
            dgvConsulta.Refresh();

            BtnAnterior.Enabled = false;
            BtnProximo.Enabled = false;
            if (lstFuncionario.Count > 0)
            {
                bsConFuncionario.DataSource = tbLocal;
                dgvConsulta.DataSource = bsConFuncionario;
                bsConFuncionario.ResetCurrentItem();

                indice = 0;
                BtnProximo.Enabled = true;
            }
        }

        private void FrmConFuncionario_Load(object sender, EventArgs e)
        {
            IniciaConsulta();
        }

        private void TxtPesquisa_TextChanged(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(TxtPesquisa.Text))
            {
                if (!String.IsNullOrEmpty(bsConFuncionario.Filter))
                    bsConFuncionario.RemoveFilter();
                CarregaBS();
            }
            else
            {
                bsConFuncionario.Filter = "Nome LIKE '%" + TxtPesquisa.Text + "%'";
            }
        }

        protected override void BotaoOK()
        {
            if (linha.ItemArray.Length > 0)
                CampoRetorno = Convert.ToInt32(linha["codigo"]);
            Close();            
        }

        private void BtnAnterior_Click(object sender, EventArgs e)
        {
            bsConFuncionario.MovePrevious();
            indice = bsConFuncionario.Position;
            contador--;
            if (contador == 0)
            {
                BtnProximo.Enabled = true;
                BtnAnterior.Enabled = false;
            }
        }

        private void BtnProximo_Click(object sender, EventArgs e)
        {
            bsConFuncionario.MoveNext();
            indice = bsConFuncionario.Position;
            contador++;
            if (contador == bsConFuncionario.Count - 1)
            {
                BtnAnterior.Enabled = true;
                BtnProximo.Enabled = false;
            }
        }

        private void bsConFuncionario_CurrentItemChanged(object sender, EventArgs e)
        {
            if (bsConFuncionario != null)
                linha = ((DataRowView)bsConFuncionario.Current).Row;
        }
    }
}
